From 1f26c3979751e7ad0285d0c4f5811ec184907597 Mon Sep 17 00:00:00 2001 From: "Wolfgang (Wolle) Ewald" Date: Sat, 8 Aug 2020 11:38:20 +0200 Subject: Add files via upload --- src/ADS1115_WE.cpp | 19 +++++++++++++++++-- src/ADS1115_WE.h | 31 ++++++++++++++++++++++++++++++- 2 files changed, 47 insertions(+), 3 deletions(-) diff --git a/src/ADS1115_WE.cpp b/src/ADS1115_WE.cpp index 9da6d48..6ccd3f4 100644 --- a/src/ADS1115_WE.cpp +++ b/src/ADS1115_WE.cpp @@ -163,14 +163,29 @@ float ADS1115_WE::getResult_mV(){ return result; } +int16_t ADS1115_WE::getRawResult(){ + int16_t rawResult = readRegister(ADS1115_CONV_REG); + return rawResult; +} + int16_t ADS1115_WE::getResultWithRange(int16_t min, int16_t max){ int16_t rawResult = readRegister(ADS1115_CONV_REG); - //rawResult = (int) (rawResult * (voltageRange * 1.0 / 6144)); int16_t result = 0; - result = map(rawResult, 0, 32767, min, max); + result = map(rawResult, -32767, 32767, min, max); return result; } +int16_t ADS1115_WE::getResultWithRange(int16_t min, int16_t max, int16_t maxMillivolt){ + int16_t rawResult = readRegister(ADS1115_CONV_REG); + int16_t result = 0; + result = map(rawResult, -32767, 32767, min, max); + result = (int16_t) (1.0 * result * voltageRange / maxMillivolt); + return result; +} + +uint16_t ADS1115_WE::getVoltageRange_mV(){ + return voltageRange; +} void ADS1115_WE::setAlertPinToConversionReady(){ writeRegister(ADS1115_LO_THRESH_REG, (0<<15)); diff --git a/src/ADS1115_WE.h b/src/ADS1115_WE.h index ce0cec2..888ef00 100644 --- a/src/ADS1115_WE.h +++ b/src/ADS1115_WE.h @@ -202,8 +202,37 @@ public: void startSingleMeasurement(); float getResult_V(); float getResult_mV(); + + /* Get the raw result from the conversion register: + * The conversion register contains the conversion result of the amplified (!) + * voltage. This means the value depends on the voltage as well as on the + * voltage range. E.g. if the voltage range is 6.144 mV (ADS1115_RANGE_6144), + * +32767 is 6.144 mV; if the range is 4.096 mV, +32767 is 4.096 mV, and so on. + */ + int16_t getRawResult(); + + /* Skaling of the result to a different range: + * The results in the conversion register are in a range of -32767 to +32767 + * You might want to receive the result in a different scale, e.g. -1023 to 1023. + * For -1023 to 1023, and if you have chosen e.g. ADS1115_RANGE_4096, 0 Volt would + * give 0 as result and 4.096 mV would give 1023. -4.096 mV would give -1023. + */ int16_t getResultWithRange(int16_t min, int16_t max); - + + /* Scaling of the result to a different range plus scaling to a voltage range: + * You can use this variant if you also want to scale to a voltage range. E.g. in + * in order to get results equivalent to an Arduino UNO (10 bit, 5000 mV range), you + * would choose getResultWithRange(-1023, 1023, 5000). A difference to the Arduino + * UNO is that you can measure negative voltages. + * You have to ensure that the voltage range you scale to is smaller than the + * measuring voltage range. For this example only ADS1115_RANGE_6144 would cover the + * scale up to 5000 mV. + */ + int16_t getResultWithRange(int16_t min, int16_t max, int16_t maxVoltage); + + /* This function returns the voltage range ADS1115_RANGE_XXXX in Millivolt */ + uint16_t getVoltageRange_mV(); + /* With this function the alert pin will be active, when a conversion is ready. * In order to deactivate, use the setAlertLimit_V function */ -- cgit v1.2.3